package db

// 新建
func (m *MysqlStruct) NewInstance(r *Instance) error {
	//tx := m.Db.Begin()
	tx := m.Db
	if err := tx.Create(&r).Error;err!=nil{
		//tx.Rollback()
		return err
	}
	//tx.Commit()
	return nil
}
// 通过id更新实例信息
func (m *MysqlStruct) UpdateInstanceById(id uint,updates map[string]interface{}) error {
	//db := m.Db.Begin()
	db := m.Db
	obj := Instance{}
	if err := db.Model(obj).Where("id = ?",id).Updates(updates).Error;err != nil{
		//db.Rollback()
		return err
	}
	//db.Commit()
	return nil
}

// 通过网卡来查找主机
func (m *MysqlStruct)GetInstanceByHardwareaddr(hardwareAddr string,r *Instance)  error {
	tx := m.Db
	return tx.Where(&Instance{HardwareAddr: hardwareAddr}).First(&r).Error
	// find xx .limit(xx)
}

func (m *MysqlStruct)GetInstanceById(id int,r *Instance)  error {
	tx := m.Db
	return tx.Where("id = ?",id).First(&r).Error
	// find xx .limit(xx)
}

func (m *MysqlStruct)GetInstanceByHostname(hostname string,r *Instance)  error {
	tx := m.Db
	return tx.Where("host_name = ?",hostname).First(&r).Error
	// find xx .limit(xx)
}

func (m *MysqlStruct)GetInstanceByIp(ip string,r *Instance)  error {
	tx := m.Db
	return tx.Where("ip = ?",ip).First(&r).Error
	// find xx .limit(xx)
}

// 重置所有实例为不在线
func (m *MysqlStruct)SetOffline()error{
	//db := m.Db.Begin()
	db := m.Db
	obj := Instance{}
	if err := db.Model(obj).Where("is_online",true).Update("is_online",false).Error;err != nil{
		return err
	}
	return nil
}

// 查询所有的主机信息
func (m *MysqlStruct)GetAllInstance( a *[]Instance)error{
	db := m.Db
	if err := db.Find(&a).Error;err != nil{
		return err
	}
	return nil
}